package com.yc.mvc.web;

import com.yc.mvc.bean.User;
import com.yc.mvc.bean.User1;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.sql.Date;
import java.text.SimpleDateFormat;

/**
 * Spring 组件注解
 *  Component  通用
 *      Controller  控制器   ==> 子注解 @RestController
 *      Service     业务层
 *      Repository  DAO层
 */
@RestController
public class IndexAction {

    // RequestMapping 请求映射注解
    // 当前方法用于响应 127.0.0.1:8080/工程名/hello
    // 返回的值就是响应的内容

    /**
     *  * 表示任意字符
     *  ** 表示任意级数的目录
     */
    @RequestMapping({"/**/hello.do","hello.do"})
    public String hello(){
        return "hello world!";
    }

    // 方法参数直接映射请求参数 (参数名映射)
    // hello?name=张三
    // RequestParam 参数映射, 默认是规则是: 名字完全相同
    @RequestMapping("hello")
    public String hello1( @RequestParam(defaultValue = "李四") String name){
        return "你好" + name;
    }

    @RequestMapping("add")
    public int add(int a , int b){
        return a+b;
    }

    @RequestMapping("user1")
    /**
     *  SpringMVC 对象参数自动装箱
     *         将请求参数与对象属性名自动映射
     *  返回的 User 对象, SpringMVC 会自动转成json格式
     *         RestContorller 潜规则:
     *         所有的方法默认返回 json 数据
     *         基本累的数据, 原值返回
     *
     */
    public User user1(User user){
        return user;
    }
    @RequestMapping("user2")
    /**
     * 嵌套的对象属性,  内部对象的属性赋值:
     *      使用 . 号分割属性名
     */
    public User1 user2(User1 user1){
        return user1;
    }

    @RequestMapping("user3")
    public String[] user3(String[] name){
        return name;
    }


    @RequestMapping("reqHeader1")
    // 或请求头参数
    public String reqHeader1(@RequestHeader("Accept") String accept){
        return "Accept => "+accept;
    }

    @RequestMapping("reqHeader2")
    // 或请求头参数
    public String reqHeader2(@RequestHeader("Host") String host){
        return "Host == "+host;
    }

    @RequestMapping("cookie1")
    // 或请求头参数
    public String cookie1(@CookieValue String name){
        return "Cookie 项 name 等于 " + name;
    }

    @RequestMapping("cookie2")
    // 或请求头参数
    public String cookie2(@CookieValue int age){
        return "Cookie 项 age 等于 " + age;
    }


    // 直接注入 Servlet对象(会话)  ==> 注入方式: 构造方法注入, setter 注入, 接口注入
    @RequestMapping("session")
    public String session(HttpSession session){
        return "会话对象: " + session.getClass().getSimpleName();
    }

    // 地址参数  127.0.0.1/indwx.html?a=100
    @RequestMapping("pv1/{word}/{name}")
    public String pv1(@PathVariable  String name, @PathVariable String word){
        return name + word;
    }

    @RequestMapping("pv2/{date}")
    public String pv2(@PathVariable String date){
        Date d = Date.valueOf(date);
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年M月d日EEE");
        String format = simpleDateFormat.format(d);
        return format;
    }





}
